package com.common.mybatis.plugins.pagination;

import org.apache.ibatis.session.RowBounds;

/**
 * 分页
 * 
 * @author songchangyou
 *
 */
public class Pagination extends RowBounds {

  /**
   * 总数
   */
  private int total;

  /**
   * 每页显示条数
   */
  private int pageSize;

  /**
   * 总页数
   */
  private int totalPageCount;

  /**
   * 当前页,从1开始计数
   */
  private int pageNumber = 1;
  
  /**
   * jQuery Pagination分页插件当前页，从0开始计数
   */
  @SuppressWarnings("unused")
  private int jqeryPageNumber = 0;
  
  /**
   * 是否查询总数 默认true
   */
  private boolean queryCount = true;

  public Pagination() {
    super();
  }

  /**
   * 分页构造函数
   * 
   * @param pageNumber
   *          当前页,从1开始计数
   * @param pageSize
   *          每页显示条数
   */
  public Pagination(int pageNumber, int pageSize) {
    super(offsetCurrent(pageNumber, pageSize), pageSize);
    if (pageNumber > 1) {
      this.pageNumber = pageNumber;
    }
    this.pageSize = pageSize;
  }

  /**
   * 获得起始行
   * 
   * @param current
   * @param size
   * @return
   */
  protected static int offsetCurrent(int current, int size) {
    if (current > 0) {
      return (current - 1) * size;
    }
    return 0;
  }

  /**
   * 获得起始行
   * 
   * @return
   */
  public int getOffsetCurrent() {
    return offsetCurrent(this.pageNumber, this.pageSize);
  }

  public boolean hasPrevious() {
    return this.pageNumber > 1;
  }

  public boolean hasNext() {
    return this.pageNumber < this.totalPageCount;
  }

  /**
   * 总数
   */
  public int getTotal() {
    return total;
  }

  /**
   * 总数
   */
  public void setTotal(int total) {
    this.total = total;
    this.totalPageCount = this.total / this.pageSize;
    if (this.total % this.pageSize != 0) {
      this.totalPageCount++;
    }
    if (this.pageNumber > this.totalPageCount) {
      /**
       * 当前页大于总页数，当前页设置为最后一页
       */
      this.pageNumber = this.totalPageCount;
    }
  }

  /**
   * 每页显示条数
   */
  public int getPageSize() {
    return pageSize;
  }

  /**
   * 总页数
   */
  public int getTotalPageCount() {
    return totalPageCount;
  }

  /**
   * 当前页,从1开始计数
   * 
   * @return
   */
  public int getPageNumber() {
    return pageNumber;
  }
  /**
   * jQuery Pagination分页插件当前页，从0开始计数
   */
  public int getJqeryPageNumber(){
	  return this.pageNumber - 1;
  }

  /**
   * 是否查询总数 默认true
   * @return
   */
	public boolean isQueryCount() {
		return queryCount;
	}
	
	/**
	 * 是否查询总数 默认true
	 * @param queryCount
	 */
	public void setQueryCount(boolean queryCount) {
		this.queryCount = queryCount;
	}

}
